// 导入数据库用户集合构造函数
const {
  User
} = require("../../model/user");
// 生成token方法
const {
  siteToken
} = require("../../utils/token");
// 哈希加密模块
const bcrypt = require("bcrypt");

// 编写登录逻辑
const login = async (req, res) => {
  // console.log(req.body);
  // 解构获取请求参数
  const {
    username,
    password
  } = req.body;
  // 后端检查是否有输入信息（前后端都应该检查，保证数据安全）
  if (username.trim() == "" || password.trim() == "") {
    // 输入不完整
    res.send({
      code: 400,
      data: {},
      msg: "请填写登录信息",
    });
  } else {
    // 根据用户名查询用户信息
    const userInfo = await User.findOne({
      username,
    });
    // 查询到该用户信息
    if (userInfo) {
      // 输入密码与数据库密码哈希加密比对是否一致
      let isValid = await bcrypt.compare(password, userInfo.password); //（异步）返回的是布尔值
      if (isValid) {
        // 通过用户名生成token
        const token = siteToken({
          username: userInfo.username
        });
        // 成功登录
        res.send({
          code: 200,
          data: {
            userInfo: userInfo,
            token: token,
          },
          msg: "登录成功",
        });
      } else {
        // 密码错误
        res.send({
          code: 400,
          data: {},
          msg: "密码错误",
        });
      }
    } else {
      // 用户不存在
      res.send({
        code: 404,
        data: {},
        msg: "用户不存在",
      });
    }
  }
};

// 导出登录接口逻辑
module.exports = login;